#include <stdio.h>
#include <string.h>
#include <unistd.h>
/*
    标准输入/输出流文件描述符
    系统调用接口
*/
int main(int argc, char const *argv[])
{
    const char* str = "hello ssh\n";
    write(STDOUT_FILENO, str, strlen(str));

    char st[100];    //字符数组
    read(STDIN_FILENO, st, 100);  //read()是另一个底层的系统调用，用于从文件描述符读取数据
    printf("%s\n", st);
    
    return 0;
}

/*
    1.定义了一个指针str,并将它指向一个字符串常量。在c++中，字符串常量不可修改
它们通常储存在只读内存区域。char*指针类型表示指向可修改内存的指针，因此要用
const char* str;

    2.在unistd头文件中提供了低级的系统调用接口：read(),write()等

    4.文件描述符！ 标准输入/输出流文件描述符，后者通常为键盘输入（文件描述符通常是0）
st通常是接收输入的缓冲区。read()会阻塞程序，直到用户从标准输入（键盘）输入数据并按下回车键，才会将读取的数据存储到st数组中

    3.系统调用（System Call）是操作系统提供的一种接口，用于应用程序与操作系统内核之间的交互。通过系统调用，程序可以请求操作系统执行某些特权操作，例如文件操作、进程管理、内存分配、设备控制等。
在操作系统中，系统调用通常分为以下几类：
1. **进程控制**：如创建进程、终止进程、暂停和恢复进程等。常见的系统调用包括 `fork()`（创建进程）、`exit()`（终止进程）、`wait()`（等待子进程结束）等。
2. **文件管理**：如打开、关闭、读写文件等。常见的系统调用包括 `open()`（打开文件）、`read()`（读取文件）、`write()`（写入文件）、`close()`（关闭文件）等。
3. **内存管理**：如分配和释放内存。常见的系统调用包括 `malloc()`（内存分配）、`free()`（内存释放）。
4. **设备控制**：如与硬件设备进行交互，包括磁盘、网络、显示器等。常见的系统调用有 `ioctl()`（设备控制）等。
5. **通信管理**：如进程间通信（IPC），包括信号、管道、共享内存等。
6. **网络管理**：如进行网络连接、数据传输等操作。
系统调用通常通过中断或软中断来切换到内核模式，在内核中完成所需的操作后，再返回用户空间。不同的操作系统有不同的系统调用接口，如 Linux 的 `syscall`，Windows 的 `WinAPI`，macOS 的 `Darwin` 等。

*/

